﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Globalization;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using LM.InterfacesFabricas.DTOs;
using LM.InterfacesFabricas.Fabricas;
using LM.InterfacesFabricas.Interfaces.Servicos;

namespace LM.Tela.Desktop.Formularios
{
    public partial class frmCadastroDeTipoDeVeiculo : Form
    {
        public frmCadastroDeTipoDeVeiculo()
        {
            InitializeComponent();
        }

        private void btnSalvar_Click(object sender, EventArgs e)
        {
            Salvar();
        }
        private void Salvar()
        {
            int codigo;
            int.TryParse(txtCodigo.Text, out codigo);
            var tipoDeVeiculo = new DtoTipoDeVeiculo { Codigo = codigo, Descricao = txtDescricao.Text};

            var servicoDeTipoDeVeiculo = FabricaGenerica.Crie<IServicoTipoVeiculo>();

            if (!EmEdicao())
                servicoDeTipoDeVeiculo.Cadastre(tipoDeVeiculo);
            else
                servicoDeTipoDeVeiculo.Atualize(tipoDeVeiculo);

            PrepareTelaParaNovoRegistro();
        }

        private void LimpeCamposEdicao()
        {
            txtCodigo.Text = string.Empty;
            txtDescricao.Text = string.Empty;
        }

        private void CarregueItensJaCadastrados()
        {
            grdTipoDeVeiculos.DataSource = FabricaGenerica.Crie<IServicoTipoVeiculo>().ConsulteTodos();
        }

       
        private void grdTipoDeVeiculos_CellDoubleClick(object sender, DataGridViewCellEventArgs e)
        {
            if (e.RowIndex >= 0)
            {
                var tipoDeVeiculo = ((IList<DtoTipoDeVeiculo>)grdTipoDeVeiculos.DataSource)[e.RowIndex];

                txtCodigo.Text = tipoDeVeiculo.Codigo.ToString(CultureInfo.InvariantCulture);
                txtCodigo.Enabled = false;
                txtDescricao.Text = tipoDeVeiculo.Descricao;
            }
        }

        private void btnNovo_Click(object sender, EventArgs e)
        {
            PrepareTelaParaNovoRegistro();
        }

        private bool EmEdicao()
        {
            return !string.IsNullOrWhiteSpace(txtCodigo.Text) && txtCodigo.Enabled == false;
        }

        private void btnExcluir_Click(object sender, EventArgs e)
        {
            if (!EmEdicao())
            {
                this.ExibaInconsistencia("Tipo de Veículo não selecionado para edição.");
            }
            else
            {
                var servicoDeTipoDeVeiculo = FabricaGenerica.Crie<IServicoTipoVeiculo>();
                servicoDeTipoDeVeiculo.Exclua(int.Parse(txtCodigo.Text));
                PrepareTelaParaNovoRegistro();
            }
            
        }

        private void PrepareTelaParaNovoRegistro()
        {
            LimpeCamposEdicao();
            CarregueItensJaCadastrados();
            txtCodigo.Enabled = true;
            txtCodigo.Focus();
        }

        private void frmCadastroDeTipoDeVeiculo_Load_1(object sender, EventArgs e)
        {
            PrepareTelaParaNovoRegistro();
        }
    }
}
